perm filename VERTI.SAI[PUB,SYS] blob sn#645421 filedate 1982-03-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGOF("VERTI")
C00003 00003	PUBLIC SIMPLE PROCEDURE VERTI! $"#
C00004 00004	PUBLIC SIMPLE BOOLEAN PROCEDURE DIMENSIONED(INTEGER DEFAULT REFERENCE INTEGER K) $"#
C00005 00005	PUBLIC SIMPLE PROCEDURE DPREFACE $"#
C00006 00006	PUBLIC RECURSIVE PROCEDURE DSKIP(BOOLEAN GRPSKIP) $"#
C00008 00007	PUBLIC SIMPLE PROCEDURE DSPACING $"#
C00009 00008	PUBLIC RECURSIVE PROCEDURE SKIPLINES(INTEGER HMLINES) $"#
C00010 00009	PUBLIC RECURSIVE PROCEDURE TOLINE(INTEGER LINENO) $"#
C00011 00010	FINISHED
C00012 ENDMK
C⊗;
BEGOF("VERTI")

COMMENT

Skipping vertically down the page.  This is short now, but it is
expected to grow with special features for high-resolution devices ;

;

PROCEDURES
PUBLIC SIMPLE PROCEDURE VERTI! ;$"#
BEGIN "VERTI!"
SPREADM ← PREFMODE ;
LEADNM ← LEADFM ← 0 ; TES 11/2/74 ;
MLEADNM ← MLEADFM ← MSPREADM ← MILLVERTIDEFAULT ; TES 11/2/74 ;
END "VERTI!" ;
PUBLIC SIMPLE BOOLEAN PROCEDURE DIMENSIONED(INTEGER DEFAULT; REFERENCE INTEGER K) ;$"#
BEGIN "DIMENSIONED"
K ← CVD(E("0"+DEFAULT, NULL)) ;
IF ITS(MILLS) OR ITS(MILL) THEN BEGIN PASS ; RETURN(TRUE) END ;
IF ITS(INCHES) OR ITS(INCH) THEN BEGIN PASS ; K←1000*K ; RETURN(TRUE) END ;
IF ITS(LINE) OR ITS(LINES) THEN PASS ;
RETURN(FALSE) ;
END "DIMENSIONED" ;
PUBLIC SIMPLE PROCEDURE DPREFACE ;$"#
BEGIN "DPREFACE" TES 11/2/74 ;
INTEGER L, M ;
DBREAK ;
PASS ;
IF NOT ON THEN BEGIN DIMENSIONED(0, L) ; RETURN END ;
M ← ABS(MILLVERTI) ;
IF DIMENSIONED(0, L) THEN BEGIN M ← L ; L ← 0 END ;
IF NOFILL THEN BEGIN MLEADNM ← M ; LEADNM ← L END
ELSE BEGIN MLEADFM ← M ; LEADFM ← L END ;
END "DPREFACE" ;
PUBLIC RECURSIVE PROCEDURE DSKIP(BOOLEAN GRPSKIP) ;$"#
BEGIN
BOOLEAN GM ;
DBREAK ; PASS ;
IF GRPSKIP THEN BEGIN SAVEXGEN; GM←GROUPM ; GROUPM ←1 ; END ;
IF ITS(TO) THEN
	BEGIN "SKIP TO"
	DAPART ; PASS ;
	IF ITS(COLUMN) THEN BEGIN PASS; TOCOLUMN(CVD(E(CVS(COL+1),NULL))) END
	ELSE BEGIN IF ITS(LINE) THEN PASS ; TOLINE(CVD(E("1", NULL))) END ;
	END "SKIP TO"
ELSE	BEGIN
	IF THISTYPE>INTERNTYPE OR THISTYPE=-TERQ OR NEXTSCH(←) OR NEXTSCH(:) THEN
		SKIPLINES(1)
	ELSE IF DIMENSIONED(1, K) THEN
		BEGIN
		ASSUREAREA ;
		IF GRPSKIP THEN MILLGSKIP(AREAIXM) ← MILLGSKIP(AREAIXM) + K
		ELSE MILLSKIP(AREAIXM) ← MILLSKIP(AREAIXM) + K
		END
	ELSE SKIPLINES(K) ;
	END ;
IF GRPSKIP AND GM = 0 THEN DAPART ;
END "DSKIP" ;
PUBLIC SIMPLE PROCEDURE DSPACING ;$"#
BEGIN "DSPACING" TES 11/2/74 ;
INTEGER L, M ;
PASS ;
IF NOT ON THEN BEGIN DIMENSIONED(0, L) ; RETURN END ;
M ← ABS(MILLVERTI) ;
IF DIMENSIONED(0, L) THEN BEGIN M ← L ; L ← 0 END ;
MSPREADM ← M ;
SPREADM ← L + 1 ;
END "DSPACING" ;
PUBLIC RECURSIVE PROCEDURE SKIPLINES(INTEGER HMLINES) ;$"#
IF ON THEN
BEGIN "SKIPLINES"
ASSUREAREA ;
IF HMLINES > 0 THEN
	IF GROUPM=0 THEN FIND!ROOM(-HMLINES, 0, COL, LINE, 0)
	ELSE	BEGIN "GROUP SKIP"
		INTEGER I ;
		FIND!ROOM(0, HMLINES, COL, LINE, 0) ;
		IF NOT GLINEM THEN GLINEM ← OLX + 1 ;
		IF COL>COLS AND LINE=0 THEN FTGP2 ← HMLINES  TES 11/2/74;
		ELSE
			BEGIN
			FOR I ← 1 THRU HMLINES DO AA[COL, LINE+I] ←
				NEWBLANK(IF GLINEM=0 AND I=1 THEN ABV ELSE ABV!BLW) ;
			LINE ← LINE + HMLINES ;
			END ;
		END "GROUP SKIP" ;
END "SKIPLINES" ;
PUBLIC RECURSIVE PROCEDURE TOLINE(INTEGER LINENO) ;$"#
    IF ON THEN
	BEGIN "TOLINE"
	ASSUREAREA ;
	IF LINENO < LINE THEN
		IF COL = COLS THEN
			BEGIN NEXTPAGE ; IF LINENO>1 THEN OPENAREA(AREAIXM) END
		ELSE BEGIN COL ← COL+1 ; LINE ← 0 ; END ;
	IF LINENO=1 THEN LINE←1 ELSE FIND!ROOM(0, 0, COL, LINENO-1, 0) ;
	END "TOLINE" ;
FINISHED

ENDOF("VERTI")